package com.szrt.day20170505.ch02;


/**
 * 
 * 用链表来模拟堆栈
 * 
 * 1： 为了保证出栈的效率  所以没增加1个节点  实际上就链表的插入操作
 * @author zsrt
 *
 */
public class Stack {
	
	
	private Node head;

	public void setHead(Node head) {
		this.head = head;
	}
	
	/**
	 * 入栈
	 * @param node
	 */
	public void push(Node node){
		
		//1 找到头结点
		Node p = this.head;
		
		node.setNext(p.getNext());
		
		p.setNext(node);
		
		
	}
	
	
	/**
	 * 出栈  1：删除1个节点   2：拿到被你删除的节点  3：为了把证出栈的效率  拿的都是头结点的下一个节点
	 * @return
	 */
	public Node pop(){
		//1 找到头结点
		Node p = this.head;
		Node jieguo = p.getNext();
		
		
		if(p.getNext() != null){
			p.setNext(p.getNext().getNext());
		}else{
			System.out.println("没子弹了......");
		}
		
		
		return jieguo;
	}
	
	/**
	 * 打印所有的节点
	 */
	public void printStack(){
		
		//1 找到头结点
		Node p = this.head;
		while(true){
			p = p.getNext();
			
			if(p!=null){
				System.out.println(p.getData() + "-->");
			}else{
				break;
			}
			
		}
	}
	
	
}
	

